package com.ct.application.sysrole.service;

import com.ct.application.commons.vo.StatusRequest;
import com.ct.application.sysapis.model.vo.SysApisVO;
import com.ct.application.sysrmenus.model.vo.SysMenusVO;
import com.ct.application.sysrole.model.vo.SysRolesMenuApisVO;
import com.ct.application.sysrole.model.vo.SysRolesVO;
import com.ct.application.sysrole.request.*;
import com.ct.repository.commons.ITransfterBaseService;
import com.ct.repository.commons.PageUtils;

import java.util.List;

/**
 * <p>
 * 角色表 服务类
 * </p>
 *
 * @author Auto Generator
 * @since 2023-08-13
 */
public interface ISysRolesService extends ITransfterBaseService {

    /**
     * 分页查询角色列表--系统角色
     * @param sysRoleSearchRequest
     * @return
     */
    PageUtils<SysRolesVO> findSystemPage(SysRoleSearchRequest sysRoleSearchRequest);

    /**
     * 分页查询角色列表 --租户角色
     * @param sysRoleSearchRequest
     * @return
     */
    PageUtils<SysRolesVO> findPage(SysRoleSearchRequest sysRoleSearchRequest);

    /**
     * 根据角色id查询对应的菜单和权限apis信息
     * @param roleId
     * @return
     */
    SysRolesMenuApisVO findRoleMenusPermission(Long roleId);


    /**
     * 根据角色id查询对应的菜单
     *
     * @param roleId
     * @return
     */
     List<SysMenusVO> findRoleMenus(Long roleId);

    /**
     * 根据角色id查询对应的权限
     *
     * @param roleId
     * @return
     */
     List<SysApisVO> findRoleApis(Long roleId) ;

    /**
     * 根据ID查询角色信息
     * @param id
     * @return
     */
    SysRolesVO selectById(Long id);

    /**
     * 根据ID删除角色信息
     * @param id
     * @return
     */
    Boolean deleteById(Long id);

    /**
     * 保存角色
     * @param sysRoleSaveRequest
     * @return
     */
    SysRolesVO saveSysRoles(SysRoleSaveRequest sysRoleSaveRequest);

    /**
     * 修改角色信息
     * @param sysRoleUpdateRequest
     * @return
     */
    SysRolesVO updateSysRoles(SysRoleUpdateRequest sysRoleUpdateRequest);

    /**
     * 修改状态
     * @param statusRequest
     * @return
     */
    Boolean updateStatusSysRoles(StatusRequest statusRequest);

    /**
     * 批量恢复
     * @param sysRoleBatchRequest
     * @return
     */
    Boolean batchStatus(SysRoleBatchRequest sysRoleBatchRequest);

    /**
     * 批量禁止
     * @param sysRoleBatchRequest
     * @return
     */
    Boolean batchForbiddens(SysRoleBatchRequest sysRoleBatchRequest);

    /**
     * 角色绑定菜单
     * @param sysRoleBindMenuRequest
     * @return
     */
    Boolean bindMenus(SysRoleBindMenuRequest sysRoleBindMenuRequest);

    /**
     * 角色绑定权限
     * @param sysRoleBindApisRequest
     * @return
     */
    Boolean bindApis(SysRoleBindApisRequest sysRoleBindApisRequest);
}
